package com.tedu.api;

import org.junit.Test;

/**
 * 字符串大量拼接：注意String造成内存溢出
 * String str="123"+st；
 * String st=“456”；
 */
public class StringBuilderAPI {

//    public void testString(){
//        String str="字符串";
//        for(int i=0;i<1000;i++);
//        str=str+i;//字符串1 2 3 4......
//        System.out.println("");
//    }
    @Test
    public void testString(){
        /**
         * String----- 不可改变对象   BUG（常量池）
         *假设：拼接出100000000000w个String--内存【开销过大】
         *  操作系统发现内存空间越来越小，会去硬盘上开辟空间--程序、电脑会卡
         *
         *  解决方案：不创建新对象，原来对象实现拼接【添加、替换、插入】
         *  StringBuilder对象      可变字符串对象
         *  语法：StringBuilder sb=new StringBuilder("字符串");
         *
         *  C语言      变量   int a=malloc（4）；开辟4个字节空间
         *                       a=1；
         *
         *  Java语言   变量   int a=1  内存开辟a空间，保存1.JVM虚拟机提供GC功能
         */
    }
     @Test
    public void testSB(){
        //创建可变的字符串对象【解决String大量拼接，造成内存溢出】
         String str="你就是我的";
         StringBuilder sb=new StringBuilder(str);
         //append方法  添加新字符串，等同于加号【拼接】
         sb.append("小可爱~");
         System.out.println(sb);
     }
    /**
     * replce方法   替换   返回值：String
     *   作用：可以将字符串中指定范围内“内容”替换为给定的内容
     *        含头不含尾
     * repalce（int start，int end，String str）
     *         开始位置，结束位置，替换内容
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类，构造器中直接穿字符串
        StringBuilder sb=new StringBuilder("你是我的笑可爱~");
        sb.replace(4,8,"我是你的谁");
        System.out.println(sb);
    }
/**
 * insert方法    插入   返回值：String
 * 作用：将给定字符串插入到当前字符串中某个位置
 * insert（int  index，String  str）
 *        插入位置，插入内容
 */
@Test
    public void testInsert (){
    //创建 可变字符串对象
    StringBuffer sb=new StringBuffer("多一眼就会爆炸");
    sb.insert(0,"再看一眼");
    System.out.println(sb);
}
}
